package test03.field;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * 反射 API 操作 - 字段（属性）操作 - Field
 *
 * @Author zqx
 * @Date 2024-03-26
 */
public class MainTest01 {
    public static void main(String[] args) throws Exception {
        // 第一：获取类的 Class 对象
        Class<?> clazz = Class.forName("org.ch03.entity.Student");

        // 第二：实例化对象 - 缺省构造方法实例化对象
        // 1.获取类的字段（属性）对象
        // 1.1 获取所有的字段
        Field[] fields = clazz.getDeclaredFields();

        // 1.2 获取公开的字段
        // Field[] fields = clazz.getFields();

        // 2.读取字段的相关信息
        String fieldName = fields[0].getName();
        int intModifiers = fields[0].getModifiers();
        String stringModifiers = Modifier.toString(intModifiers);
        Class<?> stringClass = fields[0].getType();
        // 注意：如果类型是对象类型，则返回完整 包名.类名
        String typeName = stringClass.getName();
        String simpleTypeName = stringClass.getSimpleName();

        // 第三：操作
        System.out.println("字段名称：" + fieldName);
        System.out.println("修饰符（整数表示）：" + intModifiers);
        System.out.println("修饰符（字符串表示）：" + stringModifiers);
        System.out.println("类型名称：" + typeName);
        System.out.println("类型名称：" + simpleTypeName);

    }
}
